home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zk.d64 / src.irq2.01 < prev    next >
Text File  |  2007-03-01  |  9KB  |  495 lines

  1. ;
  2. ;--------------------------------;
  3. ;                                ;
  4. ;  SRC.IRQ (COMAL PACKAGE)       ;
  5. ;                                ;
  6. ;  EXTENDING COMAL WITH PROC'S & ;
  7. ;  FUNC'S TO MAKE INTERRUPT FROM ;
  8. ;  COMAL POSSIBLE IN AN EASY WAY ;
  9. ;                                ;
  10. ;  PROCEDURES:                   ;
  11. ;      SETALARM(TIME$)           ;
  12. ;      SETCOUNT(INT)             ;
  13. ;      COUNT(FLAG)               ;
  14. ;  FUNCTIONS:                    ;
  15. ;      SSCOL                     ;
  16. ;      SDCOL                     ;
  17. ;      EVENT                     ;
  18. ;                                ;
  19. ;  BY M.BOKHORST, 850921         ;
  20. ;  DUTCH COMAL USERS GROUP       ;
  21. ;                                ;
  22. ;  LAST CHANGE:   271286         ;
  23. ;                                ;
  24. ;     +-------------------+      ;
  25. ;     !  DON'T USE RS232  !      ;
  26. ;     +-------------------+      ;
  27. ;                                ;
  28. ;--------------------------------;
  29. ;
  30. FALSE  = 0
  31. TRUE   = 1
  32. DEFPAG = %01000110
  33. FUNC   = 227
  34. ENDFNC = 126
  35. ENDPRC = 126
  36. PROC   = 112
  37. VALUE  = 114
  38. INT    = 1
  39. STR    = 2
  40. PSHINT = $C9CE
  41. EXCGST = $C9E0
  42. FNDPAR = $C896
  43. COPY1  = $45
  44. COPY2  = $47
  45. CINV   = $0314
  46. EXCINF = $4D
  47. ESCMET = $08
  48. D1ICR  = $DC0D
  49. ALARM  = 4
  50. SPRSPR = $D01E
  51. SPRBCK = $D01F
  52. SRQ    = $04
  53. DSCRD  = 3
  54. DUMMY  = $CA2F
  55. ARG    = 1
  56. RUNERR = $C9FB
  57. SRQON  = $20
  58. OVRLAY = $DE00
  59. PAGE   = 6
  60. IRQMSK = $D01A
  61. D1CRB  = $DC0F
  62. CALL   = $C881
  63. ERROR  = 9
  64. IRQRAM = $C100+$80
  65. R6510  = 1
  66. SPINT  = $03FE
  67. ICR    = $03FF
  68. IRQOCC = $D019
  69. ;
  70. ;--------------------------------;
  71. ; SPINT IDENTIFIES A SPECIAL     ;
  72. ; INTERRUPT, NOT FOR COMAL.      ;
  73. ; THIS VARIABLE EXISTS TO SAVE   ;
  74. ; TIME FOR ALREADY HANDLED IRQ'S.;
  75. ;                                ;
  76. ; BOTH RS232 BUFFERS ARE ALSO    ;
  77. ; USED BY CHANGE AND FIND!       ;
  78. ;                                ;
  79. ;--- START OF PACKAGE -----------;
  80. ;
  81. *      = $9000
  82. ;
  83. ;--- PACKAGE DEFINITION ---------;
  84. ;
  85. .BYTE DEFPAG
  86. .WORD END
  87. .WORD  SIGNAL
  88. ;
  89. .BYTE 3,'IRQ'
  90. .WORD PRTAB
  91. .WORD INIT
  92. .BYTE 0
  93. ;
  94. ;--- PROCS & FUNCS --------------;
  95. ;
  96. PRTAB
  97. ;
  98. .BYTE 5,'EVENT'
  99. .WORD HEVENT
  100. .BYTE  5,'SSCOL'
  101. .WORD HSPRIT
  102. .BYTE  5,'SDCOL'
  103. .WORD HDATA
  104. .BYTE  5,'COUNT'
  105. .WORD HCNT
  106. .BYTE  8,'SETCOUNT'
  107. .WORD HSET
  108. .BYTE 8,'SETALARM'
  109. .WORD HALARM
  110. .BYTE  11,'VERSION''IRQ'
  111. .WORD  HVERS
  112. .BYTE 0
  113. ;
  114. ;--- HEADERS --------------------;
  115. ;
  116. HEVENT
  117. ;
  118. .BYTE  FUNC            ;FUNC EVENT
  119. .WORD EVENT
  120. .BYTE  1
  121. .BYTE  VALUE+INT
  122. .BYTE ENDFNC
  123. ;
  124. HSPRIT
  125. ;
  126. .BYTE  FUNC            ;FUNC SSCOL
  127. .WORD SPR
  128. .BYTE  1
  129. .BYTE  VALUE+INT
  130. .BYTE ENDFNC
  131. ;
  132. HDATA
  133. ;
  134. .BYTE  FUNC            ;FUNC SDCOL
  135. .WORD DAT
  136. .BYTE  1
  137. .BYTE  VALUE+INT
  138. .BYTE ENDFNC
  139. ;
  140. HCNT
  141. ;
  142. .BYTE  PROC            ;PROC COUNT
  143. .WORD  CNTER
  144. .BYTE 1
  145. .BYTE VALUE+INT
  146. .BYTE ENDPRC
  147. ;
  148. HSET
  149. ;
  150. .BYTE  PROC            ;PROC
  151. .WORD  SET             ;  SETCOUNT
  152. .BYTE 1
  153. .BYTE VALUE+INT
  154. .BYTE ENDPRC
  155. ;
  156. HALARM
  157. ;
  158. .BYTE  PROC            ;PROC ALARM
  159. .WORD ALRM
  160. .BYTE 1
  161. .BYTE VALUE+STR
  162. .BYTE ENDPRC
  163. ;
  164. HVERS
  165. ;
  166. .BYTE  FUNC+STR        ;FUNC VERS$
  167. .WORD  VERSTR
  168. .BYTE  0
  169. .BYTE  ENDFNC
  170. ;
  171. ;--------------------------------;
  172. ; CODE FOR PROC SETCOUNT(INT)    ;
  173. ;      INT: 0-255                ;
  174. ;--------------------------------;
  175. ;
  176. SET    LDA #1
  177.        JSR FNDPAR
  178.        LDY #0
  179.        LDA (COPY1),Y
  180.        BEQ VALOK
  181. ARGERR LDX #ARG
  182.        JMP RUNERR
  183. VALOK  INY
  184.        LDA (COPY1),Y
  185.        BEQ ARGERR
  186.        SEI
  187.        STA CNTVAL
  188.        STA CNTING
  189.        CLI
  190.        RTS
  191. ;
  192. ;--------------------------------;
  193. ; CODE FOR SOME FUNCS            ;
  194. ; ONLY THE ASKED REGISTER BIT IS ;
  195. ; RESET AFTER READ.              ;
  196. ;--------------------------------;
  197. ;
  198. EVENT  JSR GETMSK
  199.        LDA OCUR
  200.        AND MASK      ;FILTER BIT
  201.        TAX
  202.        JSR INV
  203.        SEI
  204.        LDA OCUR
  205.        AND MASK      ;RESET BIT
  206.        STA OCUR
  207.        JMP RETVAL
  208. ;
  209. SPR    JSR GETMSK
  210.        LDA SPRITE
  211.        AND MASK
  212.        TAX
  213.        JSR INV
  214.        SEI
  215.        LDA SPRITE
  216.        AND MASK
  217.        STA SPRITE
  218.        JMP RETVAL
  219. ;
  220. DAT    JSR GETMSK
  221.        LDA DATA
  222.        AND MASK
  223.        TAX
  224.        JSR INV
  225.        SEI
  226.        LDA DATA
  227.        AND MASK
  228.        STA DATA
  229. ;
  230. RETVAL TXA
  231.        BEQ DORET
  232.        LDX #1
  233. DORET  CLI
  234.        LDA #0
  235.        JMP PSHINT
  236. ;
  237. GETMSK LDA #1
  238.        JSR FNDPAR
  239.        LDY #0
  240.        LDA (COPY1),Y
  241.        BNE DATERR
  242.        INY
  243.        LDA (COPY1),Y
  244.        CMP #8
  245.        BCS DATERR
  246.        TAX
  247.        SEC
  248.        LDA #0
  249. FRMMSK ROL A
  250.        DEX
  251.        BPL FRMMSK
  252.        STA MASK
  253.        RTS
  254. ;
  255. DATERR LDX #ARG
  256.        JMP RUNERR
  257. ;
  258. INV    LDA MASK
  259.        EOR #$FF
  260.        STA MASK
  261.        RTS
  262. ;
  263. ;--------------------------------;
  264. ; CODE FOR  PROC COUNT(INT)      ;
  265. ;      INT=0: STOP COMAL COUNTER ;
  266. ;      INT=1: START COMAL COUNTER;
  267. ;--------------------------------;
  268. ;
  269. CNTER LDA #1
  270.        JSR FNDPAR
  271.        LDY #0
  272.        LDA (COPY1),Y
  273.        INY
  274.        ORA (COPY1),Y
  275.        STA COUNT
  276.        RTS
  277. ;
  278. ;--------------------------------;
  279. ; CODE FOR  PROC SETALARM(STR)   ;
  280. ;      STR: HH:MM:SS.T           ;
  281. ;      THE SAME AS FOR SETTIME   ;
  282. ;--------------------------------;
  283. ;
  284. ALRM   LDA D1CRB
  285.        ORA #128
  286.        STA D1CRB
  287.        JSR CALL
  288.        .BYTE $80
  289.        .WORD $A7FF
  290. ERR    LDA D1CRB
  291.        AND #127
  292.        STA D1CRB
  293.        RTS
  294. ;
  295. ;--------------------------------;
  296. ; INIT ROUTINE PACKAGE           ;
  297. ; SETUP IRQ & VARIABLES          ;
  298. ;--------------------------------;
  299. ;
  300. INIT   LDX #ENDIRQ-IRQ
  301. LOOP   LDA IRQ,X
  302.        STA IRQRAM,X
  303.        DEX
  304.        BPL LOOP
  305.        LDA #<IRQRAM
  306.        LDY #>IRQRAM
  307.        SEI
  308.        STA CINV
  309.        STY CINV+1
  310.        LDA #FALSE
  311.        STA COUNT
  312.        STA DATA
  313.        STA SPRITE
  314.        STA OCUR
  315.        STA SPINT
  316.        CLI
  317.        LDA EXCINF      ;LET COMAL
  318.        ORA #SRQON      ;KNOW THAT
  319.        STA EXCINF      ;SRQ IS ON
  320.        LDA #%10000100
  321.        STA D1ICR       ;ALARM ON
  322.        LDA IRQMSK
  323.        ORA #%00000110
  324.        STA IRQMSK   ;COL'S ON
  325.        RTS
  326. ;
  327. ;--------------------------------;
  328. ; SUBROUTINE TEST: TEST FOR      ;
  329. ; SPECIAL EVENTS                 ;
  330. ;--------------------------------;
  331. ;
  332. TEST   LDA EXCINF
  333.        AND #ESCMET
  334.        BEQ NOESC
  335.        LDA #%00000001
  336.        JSR SETUP
  337. ;
  338. NOESC  LDA D1ICR
  339.        STA ICR        ;FOR COMAL
  340.        AND #ALARM
  341.        BEQ NOALRM
  342.        LDA #TRUE
  343.        STA SPINT
  344.        LDA #%00000010
  345.        JSR SETUP
  346. ;
  347. NOALRM LDA IRQOCC
  348.        AND #4
  349.        BEQ NOSPR
  350.        LDA SPRSPR
  351.        PHA
  352.        ORA SPRITE
  353.        STA SPRITE
  354.        PLA
  355.        STA $C268       ;FOR COMAL
  356.        ORA $C26C       ;FUNC
  357.        STA $C26C       ;SPRITECOL
  358.        LDA #TRUE
  359.        STA SPINT
  360.        LDA #%00000100
  361.        JSR SETUP
  362. ;
  363. NOSPR  LDA IRQOCC
  364.        AND #2
  365.        BEQ NODATA
  366.        LDA SPRBCK
  367.        PHA
  368.        ORA DATA
  369.        STA DATA
  370.        PLA
  371.        STA $C269       ;FOR COMAL
  372.        ORA $C26E       ;FUNC
  373.        STA $C26E       ;DATACOL
  374.        LDA #TRUE
  375.        STA SPINT
  376.        LDA #%00001000
  377.        JSR SETUP
  378. ;
  379. NODATA LDA COUNT
  380.        BEQ NOCNT
  381.        DEC CNTING
  382.        BNE NOCNT
  383.        LDA CNTVAL
  384.        STA CNTING
  385.        LDA #%00010000
  386.        JSR SETUP
  387. ;
  388. NOCNT  LDA #%00000110
  389.        STA IRQOCC      ;RESET VIC
  390.        RTS
  391. ;
  392. ;--------------------------------;
  393. ; SUBROUTINE SETUP: LATCH EVENTS ;
  394. ;--------------------------------;
  395. ;
  396. SETUP  ORA OCUR
  397.        STA OCUR
  398.        LDA EXCINF
  399.        ORA #SRQ
  400.        STA EXCINF
  401.        RTS
  402. ;
  403. ;--------------------------------;
  404. ; PACKAGE SIGNAL ROUTINE         ;
  405. ;--------------------------------;
  406. ;
  407. SIGNAL CPY #DSCRD
  408.        BNE LETON
  409.        LDA #<$C3BF
  410.        LDY #>$C3BF
  411.        SEI
  412.        STA CINV
  413.        STY CINV+1
  414.        CLI
  415. OKDONE RTS
  416. LETON  CPY #ERROR
  417.        BNE OKDONE
  418.        JMP ERR          ;RESET
  419. ;                        SETALARM
  420. ;
  421. ;--------------------------------;
  422. ; NEW IRQ ROUTINE                ;
  423. ; NOTICE THAT THE FIRST PART OF  ;
  424. ; THE COMAL ROUTINE IS SKIPPED.  ;
  425. ; THIS ROUTINE IS TRANSFERED TO  ;
  426. ; IRQRAM (RAM!)                  ;
  427. ;--------------------------------;
  428. ;
  429. IRQ    LDA PAGE
  430.        PHA
  431.        LDA R6510
  432.        PHA
  433.        LDA #$36
  434.        STA R6510
  435.        LDA #$E0        ;SELECT RAM
  436.        STA PAGE
  437.        STA OVRLAY
  438.        JSR TEST
  439.        PLA
  440.        STA R6510
  441.        LDA SPINT
  442.        BEQ GOCOML
  443.        LDA #FALSE
  444.        STA SPINT
  445.        PLA
  446.        STA PAGE
  447.        STA OVRLAY
  448.        JMP $EA81
  449. GOCOML LDA #$83        ;COMAL PAGE
  450.        STA PAGE
  451.        STA OVRLAY
  452.        LDA ICR
  453.        JMP $C3CC
  454. ENDIRQ
  455. ;
  456. ;--------------------------------;
  457. ; SOME VARIABLES                 ;
  458. ;--------------------------------;
  459. ;
  460. OCUR   .BYTE 0
  461. SPRITE .BYTE 0
  462. DATA   .BYTE 0
  463. COUNT  .BYTE 0
  464. CNTING .BYTE 0
  465. CNTVAL .BYTE 0
  466. MASK   .BYTE 0
  467. ;
  468. ;--------------------------------;
  469. ; CODE FOR VERSION'IRQ$          ;
  470. ;--------------------------------;
  471. VERSTR LDA #VERST3-VERST2+2
  472.        JSR EXCGST
  473.        LDY #0
  474. VERST1 LDA VERST2,Y
  475.        STA (COPY2),Y
  476.        INY
  477.        CPY #VERST3-VERST2
  478.        BNE VERST1
  479.        LDA #0
  480.        STA (COPY2),Y
  481.        LDA #VERST3-VERST2
  482.        INY
  483.        STA (COPY2),Y
  484.        RTS
  485. ;
  486. VERST2 .BYTE ' 2.01 IRQ PACKAGE'
  487.        .BYTE ' BY MARCEL BOKHORST'
  488. VERST3
  489. ;
  490. ;--------------------------------;
  491. ; AND FINALLY THE                ;
  492. ;--------------------------------;
  493. ;
  494. END    .END
  495.